package cn.com.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

import java.util.Locale;

/**
 * Web层相关的实用工具类
 *
 * @author
 */
@Slf4j
public class WebUtil {


    private static MessageSource messageSource;

    static {
        // 初始化 MessageSource
        try {
            messageSource = new ReloadableResourceBundleMessageSource();
            ((ReloadableResourceBundleMessageSource) messageSource).setBasename("classpath:messages");
            ((ReloadableResourceBundleMessageSource) messageSource).setDefaultEncoding("UTF-8");
            ((ReloadableResourceBundleMessageSource) messageSource).setUseCodeAsDefaultMessage(true);
            ((ReloadableResourceBundleMessageSource) messageSource).setCacheSeconds(60);
            ((ReloadableResourceBundleMessageSource) messageSource).setDefaultLocale(Locale.CHINA);
        } catch (Exception e) {
            log.error("初始化 MessageSource 失败: {}", e.getMessage());
        }
    }

    /**
     * 根据消息代码获取消息内容
     *
     * @param code 消息代码
     * @return 消息内容
     */
    public static String getMessage(String code) {
        return messageSource.getMessage(code, null, Locale.getDefault());
    }

    /**
     * 根据消息代码获取消息内容，并传入参数
     *
     * @param code 消息代码
     * @param args 参数
     * @return 消息内容
     */
    public static String getMessage(String code, Object... args) {
        return messageSource.getMessage(code, args, Locale.getDefault());
    }

    /**
     * 根据指定的Locale获取消息内容
     *
     * @param code   消息代码
     * @param locale Locale对象
     * @return 消息内容
     */
    public static String getMessage(String code, Locale locale) {
        return messageSource.getMessage(code, null, locale);
    }

    /**
     * 根据指定的Locale获取消息内容，并传入参数
     *
     * @param code   消息代码
     * @param locale Locale对象
     * @param args   参数
     * @return 消息内容
     */
    public static String getMessage(String code, Locale locale, Object... args) {
        return messageSource.getMessage(code, args, locale);
    }
}
